#include <time.h>
/*
void DateToStr(char *, struct tm *);
void DateTimeToStr(char *, struct tm *);
void LocalDateTime(struct tm *);
void DateDiff(struct tm *, struct tm *, struct tm *);
*/

typedef char TData[11];
typedef char TDataHora[20];

void tm_copy(struct tm * destino, struct tm * origem)
{
	destino->tm_sec   = origem->tm_sec;
    destino->tm_min   = origem->tm_min;
    destino->tm_hour  = origem->tm_hour;
    destino->tm_mday  = origem->tm_mday;
    destino->tm_mon   = origem->tm_mon;
    destino->tm_year  = origem->tm_year;
    destino->tm_wday  = origem->tm_wday;
    destino->tm_yday  = origem->tm_yday;
    destino->tm_isdst = origem->tm_isdst;	
}

void tm_zera(struct tm * atm)
{
	atm->tm_sec   = 0;
    atm->tm_min   = 0;
    atm->tm_hour  = 0;
    atm->tm_mday  = 0;
    atm->tm_mon   = 0;
    atm->tm_year  = 0;
    atm->tm_wday  = 0;
    atm->tm_yday  = 0;
    atm->tm_isdst = 0;
}

void DateToStr(char * data, struct tm * tempo)
{
  strftime(data, 11, "%d/%m/%Y", tempo);
  return;
}

void DateTimeToStr(char * data, struct tm * tempo)
{
  strftime(data, 20, "%d/%m/%Y %H:%M:%S", tempo);
  return;
}

void LocalDateTime(struct tm * tempo)
{
	time_t segundos; // guarda os segundos deste 01/01/1970
	struct tm * tempo_atual;

	time(&segundos);
	tempo_atual = localtime(&segundos);
	tm_copy(tempo, tempo_atual);
}

void DateDiff(struct tm * diferenca, struct tm * minuendo, struct tm *subtraendo)
{
	int vai1;
	vai1 = 0;
	tm_zera(diferenca);
	//segundos
	if(minuendo->tm_sec >= subtraendo->tm_sec)
		diferenca->tm_sec = minuendo->tm_sec - subtraendo->tm_sec;
	else
	{
		diferenca->tm_sec = (60 + subtraendo->tm_sec) - minuendo->tm_sec;
		vai1 = 1;
	}
		
	//minutos
	if((minuendo->tm_min - vai1) >= subtraendo->tm_min)
	{
		diferenca->tm_min = (minuendo->tm_min - vai1) - subtraendo->tm_min;
		vai1 = 0;
	}
	else
	{
		diferenca->tm_min = (60  + minuendo->tm_min - vai1) - subtraendo->tm_min;
		vai1 = 1;
	}
	
	//horas
	if((minuendo->tm_hour - vai1) >= subtraendo->tm_hour)
	{
		diferenca->tm_hour = (minuendo->tm_hour - vai1) - subtraendo->tm_hour;
		vai1 = 0;
	}
	else
	{
		diferenca->tm_hour = (24  + minuendo->tm_hour - vai1) - subtraendo->tm_hour;
		vai1 = 1;
	}
	
	//dias
	if ((minuendo->tm_mday - vai1) >= subtraendo->tm_mday)
	{
		diferenca->tm_mday = (minuendo->tm_mday - vai1) - subtraendo->tm_mday;
		vai1 = 0;
	}
	else
	{
		diferenca->tm_mday = (31  + minuendo->tm_mday - vai1) - subtraendo->tm_mday;
		vai1 = 1;
	}
	
	//meses
	if ((minuendo->tm_mon - vai1) >= subtraendo->tm_mon)
	{
		diferenca->tm_mon = (minuendo->tm_mon - vai1) - subtraendo->tm_mon;
		vai1 = 0;
	}
	else
	{
		diferenca->tm_mon = (12  + minuendo->tm_mon - vai1) - subtraendo->tm_mon;
		vai1 = 1;
	}

	diferenca->tm_year = (minuendo->tm_year - vai1) - subtraendo->tm_year;
}
